package cn.bdqn.t354.dao;

import cn.bdqn.t354.entity.Role;
import cn.bdqn.t354.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import javax.transaction.Transactional;
import java.util.Set;

@SpringBootTest
@RunWith(SpringRunner.class)
public class OneToManyTester {
    @Resource
    UserDao userDao;
    @Resource
    RoleDao roleDao;


    @Test
    @Transactional
    @Rollback(false)
    public void testSave(){
        //保存一个用户和一个角色

        //1.创建一个用户对象
        User user=new User();
        user.setUsrName("大臂");

        //2.创建一个角色
        Role role=new Role();
        role.setRoleName("技术总监");

        //3.2个对象产生关系
        user.setRole(role);
        role.getUsers().add(user);

        //4.保存
        roleDao.save(role);
        userDao.save(user);
    }

    //从多的一方查询少的一方 采用的是立即加载
    @Test
    @Transactional
    public void testGet(){
        User user = userDao.findById(6l).get();
        System.out.println(user.getUsrName());

        //对象导航查询 通过用户能够查询到角色
        Role role = user.getRole();
        System.out.println(role.getRoleName());
    }

    //从少的一方查询多的一方 采用的是延迟加载（懒加载）
    @Test
    @Transactional
    public void testGet2(){
        Role role = roleDao.findById(2l).get();
        System.out.println(role.getRoleName());

        //对象导航查询 通过用户能够查询到角色
        Set<User> users = role.getUsers();
        for (User user : users) {
            System.out.println(user.getUsrName());
        }

    }


    @Test
    @Transactional
    @Rollback(false)
    public void testAddCascad(){
        //保存一个用户和一个角色

        //1.创建一个用户对象
        User user=new User();
        user.setUsrName("大臂");

        //2.创建一个角色
        Role role=new Role();
        role.setRoleName("技术总监");

        //3.2个对象产生关系
        user.setRole(role);
        role.getUsers().add(user);

        //4.保存
        roleDao.save(role);
    }

    @Test
    @Transactional
    @Rollback(false)
    public void testDeleteCascad(){
        //查询id=36的角色
        Role role = roleDao.findById(36l).get();
        roleDao.delete(role);
    }
}
